/**
 * \file fenprincipale.h
 * \author Florian LANCE - Armand POLI
 * \version 1.0
 * \date octobre 2011
 */

#ifndef FENPRINCIPALE_H
#define FENPRINCIPALE_H

#include <QMainWindow>
#include <QGridLayout>
#include <QImage>
#include <QPixmap>
#include <QLabel>
#include <QStringList>
#include <QDir>
#include <QStringListModel>
#include <QPoint>
#include <QApplication>
#include <QtGui>

#include <iostream>

#include "enum.h"

#include "Image.h"
#include "FCorrespondance.h"
#include "wHistogramme.h"
#include "wHistoAffichage.h"
#include "wISelectionContours.h"
#include "Histogramme.h"
#include "InterfaceQTImage.h"
#include "Contour.h"
#include "FFT.h"
#include "Filtre.h"


#include <vector>
#include <ctime>

namespace Ui {
    class FenPrincipale;
}

/**
* @class Classe FenPrincipale qui hérite d'une QMainWindow, contient l'interface de la fenêtre principale.
*/
class FenPrincipale : public QMainWindow
{
    Q_OBJECT

    public:
        /** @brief Constructeur de FenPrincipale. */
        explicit FenPrincipale(QWidget *parent = 0);
        ~FenPrincipale();

        void modifier();

    public slots:

        /** @brief Procédure permettant de sauvegarder l'image en cours. */
        void sauvegarde();
        /** @brief Procédure de chargement d'une image */
        void chargerImage();
        /** @brief Procédure de selection d'un contour sur une image. */
        void selectionContours();
        /** @brief Procédure d'initialisation de la fonction de calcul de la TF   partir des points sélectionnés */
        void initFourierContour();

        void on_hs_operation_sliderMoved(int position);
        void on_pb_effacerHisto_clicked();
        void on_tw_visuels_selected(const QString &arg1);
        void on_pb_translation_clicked();
        void on_pb_inversion_clicked();
        void on_pb_egalisation_clicked();
        void on_pb_filtreMedian_clicked();
        void on_pb_specification_clicked();
        void on_pb_specificationGlissante_clicked();
        void on_pb_kmoyennes_clicked();

private:

        Ui::FenPrincipale *ui;               /**< Interface Qt de la fenêtre principale. */

        QImage histogramme;                  /**< Histogramme de l'image affichée. */
        QString cheminDossierImages;         /**< String contenant le chemin du dossier d'images. */
        QString operationCourante;           /**< String contenant le nom de l'opération en cours. */
        QString visuelSelectionne;
        QDialog selectionC;                  /**< Fenetre de dialogue permettant la sélection de contours. */
        QGridLayout layoutSelectionContours; /**< Layout utilisé dans la fenêtre de dialogue de sélection de contours. */
        QPixmap pixmap_imgModif;

        Fcorr correspondance;                /**< Fonction de correspondance utilisées pour appliquer les opérations sur les images. */
        Contour *c;                          /**< Contour qui contiendra la sélection et sur lequel est appliqué la TF. */
        Image<1> img;                        /**< Image sur laquelle on travaille. */
        wHisto *whisto;                      /**< Widget qui va contenir l'histogramme que l'on va dessiner pour les spécifications d'image. */
        wHistoAff *whistoAffBase;            /**< Widget conteneur qui va afficher l'image de base. */
        wHistoAff *whistoAffFinal;           /**< Widget conteneur qui va afficher l'image résultat. */
        wISelectionContours *whistoISC;      /**< Widget qui va permettre de sélectionner le contours sur une image. */

        uint largeurImageVoulue;             /**< Largeur voulue des images pour l'affichage (scalage Qt). */
        uint hauteurImageVoulue;             /**< Hauteur voulue des images pour l'affichage (scalage Qt). */
        uint largeurImage;                   /**< Largeur de l'image chargée. */
        uint hauteurImage;                   /**< Hauteur de l'image chargée. */

        bool imageChargee;                   /**< Booleen indiquant si une image a été chargée. */
        bool imageModifiee;                  /**< Booleen indiquant si une image a été modifiée. */
        bool contourFiltre;                  /**< Booleen indiquant si un contour a été filtré. */
        bool selectionContourInit;           /**< Booleen indiquant si la selection de contour a été initialisée. */



private slots:
    void on_pb_imgFourier_clicked();
    void on_pb_chargerContour_clicked();
    void on_pb_enregistrerContour_clicked();

    void on_pbAmplitude_clicked();
    void on_pbPhase_clicked();
};

#endif // FENPRINCIPALE_H
